package cl.uchile.coupling.messaging;

import cl.uchile.cos.session.Client;
import cl.uchile.cos.session.SessionManager;
import cl.uchile.cos.sync.adapters.Adapter;

/*
 * Al usar el contenedor spring para mantener los clientes en la sesion, no se puede mantener ademas una
 * lista de clientes aparte para, por ejemplo, desonectarlos de la sesion si la sesion es destruida.
 * Al usuar un wraper y una estrategia inteligente para la creacion de clientes se puede solventar este problema
 */
public class ClientWrapper implements Client {
	/**
	 * 
	 */
	private static final long serialVersionUID = -8695487616883609634L;
	private Client client;
	private SessionManager manager;

	public ClientWrapper(Client client,SessionManager manager){
		this.client=client;
		this.manager=manager;
	}
	@Override
	public void setId(Long id) {
		this.client.setId(id);

	}

	@Override
	public Long getId() {
		return this.client.getId();
	}

	@Override
	public void addAdapter(String SessionId, Adapter adapter) {
		this.client.addAdapter(SessionId, adapter);

	}

	@Override
	public Adapter getAdapter(String sessionId) {
		return this.client.getAdapter(sessionId);
	}

	@Override
	public boolean equals(Client c) {
		return this.client.equals(c);
	}
	@Override
	public void destroy(){
		this.manager.destroyClient(client);
	}
	public String toString(){
		return "Id Cliente:"+this.getId();
	}

}
